from peewee import *

from config.base_config import *

# 创建一个 MySQL 数据库连接
db_n = get_db_n()


# 定义基础模型，所有动态创建的模型都继承自这个基础模型
class BaseModel(Model):
    class Meta:
        database = db_n  # 使用上面定义的数据库连接


# 动态创建表的函数
def create_dynamic_model(table_name, fields, unique_indexes=None):
    """
    动态创建带有唯一索引的表，可选传入唯一索引字段。

    :param table_name: 表名
    :param fields: 字段字典，例如 {'name': CharField(), 'age': IntegerField()}
    :param unique_indexes: 可选，唯一索引字段的元组列表，例如 [('name',), ('name', 'age')]; 默认为 None
    """

    # fields_dict 是一个字典，包含字段名称和类型，例如 {'name': CharField(), 'age': IntegerField()}
    # 定义带有唯一索引的 Meta 类
    class Meta:
        database = db_n
        if unique_indexes:
            indexes = [(index, True) for index in unique_indexes]  # 如果传入索引字段，为指定字段创建唯一索引
        else:
            indexes = []  # 如果未传入索引字段，则不设置唯一索引
        # 动态创建表

    attrs = {**fields, 'Meta': Meta}  # 将字段和 Meta 类合并
    dynamic_model = type(table_name, (BaseModel,), attrs)  # 动态创建模型类
    # 使用 Peewee 的 create_table 方法创建表
    with db_n:
        db_n.create_tables([dynamic_model], safe=True)
    return dynamic_model
